package com.junzhiit.nengji.shop.dao;

import java.util.List;

import com.bainaeco.framework.base.dao.BaseDAO;
import com.junzhiit.nengji.shop.bo.GoodsBO;
import com.junzhiit.nengji.shop.bo.OrdersGoodsInfoBO;
import com.junzhiit.nengji.shop.model.Goods;
import com.junzhiit.nengji.shop.model.enums.GoodsImagesType;

public interface GoodsDAO extends BaseDAO<Goods> {
	/**
	 * 
	 * TODO 查询商品列表
	 * 
	 * @author FebRosy
	 * @time 2018年1月24日 下午7:51:15
	 * @return List<GoodsBO>
	 */
	public List<GoodsBO> findPageAll(GoodsBO goodsBO, int pageNumber, int maxPageRow,Integer isPlatform);

	/**
	 * 
	 * TODO 查询商品总数
	 * 
	 * @author FebRosy
	 * @time 2018年1月24日 下午8:34:03
	 * @return int
	 */
	public int getTotalCount(GoodsBO goodsBO,Integer isPlatform);

	/**
	 * 
	 * TODO 获取商品code
	 * 
	 * @author FebRosy
	 * @time 2018年1月24日 下午4:04:29
	 * @return int
	 */
	public String queryMaxCode();

	/**
	 * 
	 * TODO 获取商品详细信息(关联其他表信息)
	 * 
	 * @author FebRosy
	 * @time 2018年1月25日 下午3:00:40
	 * @return GoodsBO
	 */
	public GoodsBO findByIdForOther(String id);

	/**
	 * 
	 * TODO 批量上下架
	 * 
	 * @author FebRosy
	 * @time 2018年1月25日 下午4:54:18
	 * @return ResultVO
	 */
	public boolean batchUpdateStatus(String[] ids, Integer status);

	/**
	 * 
	 * TODO 上下架
	 * 
	 * @author FebRosy
	 * @time 2018年1月25日 下午7:13:47
	 * @return boolean
	 */
	public boolean updateStatus(String id, Integer status);
	
	/**
	 * 
	 * TODO api 查询店铺所有商品（分页）
	 * 
	 * @author Qjen
	 * @time 2018年2月23日 下午2:36:14
	 * @return List<GoodsBO>
	 *
	 */
	public List<GoodsBO> findAll(String shopId, Integer status,Integer goodsSearchType,int pageNumber, int maxPageRow);
	
	/**
	 * 
	 * TODO api 查询店铺所有商品数量(分页)
	 * @author PeterMo
	 * @time 2018年3月6日 下午3:57:03
	 * @return int
	 */
	public int findAllByPageTotalCount(String shopId, Integer status,Integer goodsSearchType); 
	/**
	 * 
	 * TODO api 根据code查询商品信息
	 * 
	 * @author Qjen
	 * @time 2018年2月24日 下午2:28:18
	 * @return GoodsBO
	 *
	 */
	public GoodsBO getGoodsByCode(String Code);
	/**
	 * 
	 * TODO api 根据code和图片类型查询商品图片
	 * 
	 * @author Qjen
	 * @time 2018年2月24日 下午3:35:31
	 * @return List<String>
	 *
	 */
	public List<String> getFileNameByCode(String code,GoodsImagesType type);
	
	/**
	 * 
	 * TODO 根据ID查询商品是否存在
	 * @author PeterMo
	 * @time 2018年2月26日 上午11:39:18
	 * @return int
	 */
	public int checkGoods(String id);

	
	/**
	 * 
	 * TODO 查询商品信息(SKU)
	 * @author PeterMo
	 * @time 2018年3月1日 下午3:03:54
	 * @return GoodsBO
	 */	
	public GoodsBO getGoodsByBarcode(String userId,String shopId,String goodsId,String skuContentId);
	
	/**
	 * 
	 * TODO 查询商品信息(不是SKU)
	 * @author PeterMo
	 * @time 2018年3月1日 下午3:04:13
	 * @return GoodsBO
	 */
	public GoodsBO getGoodsInfo(String userId,String shopId,String goodsId);
	
	public OrdersGoodsInfoBO findGoodsIdIsSku(String userId,String shopId,String skuContentId);
	
	public OrdersGoodsInfoBO findGoodsId(String userId,String shopId,String goodsId);
	
	/**
	 * 
	 * TODO 查询待审核商品的数量
	 * @author Zaki
	 * @time 2018年4月10日 下午12:00:33
	 * @return int
	 */
	public int getCountByGoodsApproval();
	
	/**
	 * 
	 * TODO 搜索商品
	 * 
	 * @author Qjen
	 * @time 2018年5月9日 下午1:50:24
	 * @return List<GoodsBO>
	 *
	 */
	public List<GoodsBO> findGoods(String goodsName,String typeId,String shopId,Integer staus);
	
	/**
	 * TODO 根据系统类型查询所有的商品(只能查询出总部平台的商品)
	 * @author Dlam
	 * @time 2018年8月2日 下午3:10:50
	 * @return List<GoodsBO>
	 * 
	 */
	public List<GoodsBO> findGoodsBySystemType(String goodsName,String systemTypeId,String shopId,Integer staus);
	
	/**
	 * 
	 * TODO 搜索商品
	 * 
	 * @author Qjen
	 * @time 2018年5月9日 下午1:50:24
	 * @return List<GoodsBO>
	 *
	 */
	public List<GoodsBO> findGoods(String goodsName);
	
	/**
	 * 
	 * TODO 查找指定店铺下所有未下架未删除商品
	 * @author Zaki
	 * @time 2018年5月16日 下午4:23:40
	 * @return List<Goods>
	 */
	public List<Goods> findAllGoods(String shopId);
	
	/**
	 * 
	 * TODO 修改商品是否开启分销
	 * @author PeterMo
	 * @time 2018年7月20日 下午3:08:23
	 * @return boolean
	 */
	public boolean updateIsOpenSell();
	
	/**
	 * 
	 * TODO 修改商品是否开启返利
	 * @author PeterMo
	 * @time 2018年7月21日 上午11:58:53
	 * @return boolean
	 */
	public boolean updateIsOpenRebate();
	
	/**
	 * 
	 * TODO 根据shopId修改商品是否开启分销
	 * @author PeterMo
	 * @time 2018年7月21日 下午4:30:37
	 * @return boolean
	 */
	public boolean updateIsOpenSellByShopId(Integer isOpenSell ,String shopId);
	
	/**
	 * 
	 * TODO 根据shopId修改商品是否开启返利
	 * @author PeterMo
	 * @time 2018年7月21日 下午4:31:04
	 * @return boolean
	 */
	public boolean updateIsOpenRebateByShopId(Integer IsOpenRebate ,String shopId);
	
	/**
	 *  根据店铺ID查询销量前3的商品
	 * @param shopId
	 * @return
	 */
	public List<GoodsBO> getGoodsByShopId(String shopId);
}
